//
//  JKUserAccount.swift
//  新浪微博
//
//  Created by Jack.Lin on 16/7/4.
//  Copyright © 2016年 Jack.Lin. All rights reserved.
//

import UIKit

private let accountFile: NSString = "useraccount.json"

class JKUserAccount: NSObject {

    // 访问令牌
//    var access_token: String?
    var access_token: String? //= "2.00AREEODs8MrbE0d11f247ecNCdneB"
    
    // 用户代号
    var uid: String?
    // access_token的生命周期, 单位是描述
    // 开发者 5 年
    // 使用者 3 年
    var expires_in: TimeInterval = 0 {
    
        didSet {
            expiresDate = Date(timeIntervalSinceNow: expires_in)
        }
    }
    
    // 过期日期
    var expiresDate: Date?
    
    var screen_name: String?
    
    var avatar_large: String?
    
    override var description: String {
       
        return yy_modelDescription()
    }
    
    override init() {
       super.init()
        
        // 从磁盘加载保存的文件 -> 字典
        // 1> 加载磁盘文件到二进制数据, 如果失败直接返回
        guard let path = accountFile.cz_appendDocumentDir(),
            data = NSData(contentsOfFile: path),
        dict = try? JSONSerialization.jsonObject(with: data as Data, options: []) as? [String :AnyObject]
        else {
            return
        }
        
        // 2. 使用字典设置属性值
    
        yy_modelSet(with: dict ?? [:])

        // 3. 判断 token 是否过期
        
        if expiresDate?.compare(Date()) != .orderedDescending {
           
            print("账户过期")
            
            access_token = nil
            uid = nil
            
            _ = try? FileManager.default.removeItem(atPath: path)
            
        }
        
        print("从沙盒加载用户信息 \(self, path)")
    }
    
    
    /**
      数据存储方式 : 
      1. 偏好设置(小) - Xcode 8.0 beat 无效
      2. 沙盒- 归档/ plist/json
      3. 数据库(FMDB/CoreData)
      4. 钥匙串访问(小 / 自动加密 - 需要使用框架 SSKeychain )
    */
    func saveAccount() {
       
        // 1. 模型转字典
        var dict = (self.yy_modelToJSONObject() as? [String: AnyObject]) ?? [:]
        
        dict.removeValue(forKey: "expires_in")
        
        // 2. 字典序列化 data 
        guard let data = try? JSONSerialization.data(withJSONObject: dict, options: []),
        filePath = accountFile.cz_appendDocumentDir()
            else {
              return
        }
        
        (data as NSData).write(toFile: filePath, atomically: true)
        print("用户账户保存成功 \(filePath)")
    }
    
}
